package com.yfp.goods.service;

import com.yfp.common.core.domain.R;
import com.yfp.goods.domain.Combo;
import com.yfp.goods.domain.dto.ComboDto;
import com.yfp.goods.domain.dto.ComboGroupDTO;
import com.yfp.goods.domain.dto.ComboPlanDto;
import com.yfp.goods.domain.vo.ComboVo;

import java.util.List;

/**
 * 套餐表(Combo)表服务接口
 *
 *
 * @since 2023-12-27 13:33:24
 */
public interface ComboService {

    /**
     * 通过ID查询单条数据
     *
     * @param comboId 主键
     * @return 实例对象
     */
    Combo queryById(String comboId);

    /**
     * 分页查询
     *
     * @param combo 筛选条件
     * @return 查询结果
     */
    List<ComboDto> queryAll(Combo combo);

    /**
     * 新增数据
     *
     * @param combo 实例对象
     * @return 实例对象
     */
    Combo insert(Combo combo);

    /**
     * 修改数据
     *
     * @param combo 实例对象
     * @return 实例对象
     */
    Combo update(Combo combo);

    /**
     * 新增套餐
     *
     * @param comboVo combo vo
     * @return {@link Combo}
     */
    R addCombo(ComboVo comboVo);

    /**
     * 更新套餐
     *
     * @param comboVo combo vo
     * @return {@link ComboVo}
     */
    ComboVo updateComboVo(ComboVo comboVo);

    /**
     * 上下架套餐
     *
     * @param comboId 组合id
     * @return boolean
     */
    boolean shelfCombo(String comboId);

    /**
     * 通过套餐id查询所在投放计划
     *
     * @param comboId 组合id
     * @return {@link List}<{@link ComboPlanDto}>
     */
    List<ComboPlanDto> queryComboPlan(String comboId);

    List<Combo> getComboIds(Combo combo);

    /**
     * 上下架团餐
     *
     * @param comboId
     * @return
     */
    boolean groupShelfCombo(String comboId);

    /**
     * 获取上架团餐列表
     *
     * @return
     */
    List<ComboGroupDTO> getGroupShelfComboList();

    /**
     * 根据套餐id集合查询套餐
     *
     * @param comboIds
     * @return
     */
    List<Combo> queryByIds(List<String> comboIds);
}
